// 店铺的id
const shop_id = "1";

// 图片路径的公用部分
// const img_src = "/imgs";
const img_src = "https://www.yifale.com/static/shop/imgs";

// 请求时接口的公用部分
const ajax_url = "https://www.yifale.com";

// 上传图片的接口
const add_img_url = "?m=Api&c=Qita&a=img_upload";
// 上传图片的name值
const file_img_name = "img";

// 上传视频的接口
const add_video_url = "?m=Api&c=Qita&a=img_upload";
// 上传视频的name值
const file_video_name = "img";
// 上传视频的大小限制
const video_size = 50000000;

// 店内设施
const dnss = {
  1: "wifi",
  2: "停车位",
  3: "支付宝支付",
  4: "微信支付",
};

// 商品分类
const goods_type = {
  1: "限时抢购",
  2: "疯狂砍价",
  3: "特价拼团",
  4: "清仓特卖",
  5: "预约服务",
}

// 网络请求（GET）
function ajax_get(obj) {
  obj.method = "GET";
  ajax(obj);
}
// 网络请求（POST）
function ajax_post(obj) {
  obj.method = "POST";
  ajax(obj);
}
// 网络请求
function ajax(obj) {
  wx.request({
    url: ajax_url + obj.url,
    method: obj.method ? obj.method : "GET",
    data: obj.data ? obj.data : {},
    header: {
      'Accept': 'application/json',
      'content-type': 'application/x-www-form-urlencoded',
      "shopid": shop_id,
      "memberid": getApp().data.member_id,
    },
    success: function(res) {
      if (obj.success) {
        obj.success(res);
      }
    },
    fail: function(res) {
      if (obj.fail) {
        obj.fail(res);
      }
    },
    complete: function() {
      if (obj.complete) {
        obj.complete(res);
      }
    }
  })
}

// 封装一个上传图片的函数
function add_img(length, success) {
  const that = this;
  // 获取本地图片的路径
  wx.chooseImage({
    count: length, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
    success: function(res) {
      // 显示上传动画
      show("图片上传中...");
      // 将新添加的图片添加到imgs_arr中
      const imgs = res.tempFilePaths;
      // 调用上传图片的函数
      that.file_img(imgs, 0, success);
    }
  })
}
// 封装一个上传图片的函数
function file_img(imgs, index, success) {
  const that = this;
  // 如果数组长度大于下标，说明没有上传完
  if (imgs.length > index) {
    const src = imgs[index];
    //上传图片
    wx.uploadFile({
      url: ajax_url + add_img_url,
      filePath: src,
      name: file_img_name,
      success: function(res) {
        success(res.data);
        that.file_img(imgs, index + 1, success);
      },
      error: function(e) {
        // 关闭上传动画
        hide();
      },
    })
  } else {
    // 关闭上传动画
    hide();
  }
}

// 图片预览函数
function look_img(current, urls) {
  wx.previewImage({
    current: current, // 当前显示图片的https链接
    urls: urls // 需要预览的图片https链接列表
  })
}

// 封装一个上传视频的函数
function add_video(success1, success2) {
  // 获取本地视频的路径
  wx.chooseVideo({
    sourceType: ['album', 'camera'],
    maxDuration: 60, // 拍摄视频最长拍摄时间，单位秒。最长支持 60 秒
    camera: 'back',
    success: (res) => {
      if (res.size > video_size) {
        ti_shi("上传视频过大");
      } else {
        // 显示上传动画
        show("视频上传中...");
        // 调用上传视频的函数
        file_video(res.tempFilePath, success1, success2);
      }
    }
  })
}
//上传视频
function file_video(src, success1, success2) {
  //上传视频
  const UploadTask = wx.uploadFile({
    url: ajax_url + add_video_url,
    filePath: src,
    name: file_video_name,
    success: (res) => {
      success1(res.data);
      // 关闭上传动画
      hide();
    },
    error: (e) => {
      // 关闭上传动画
      hide();
    },
  })
  if (success2) {
    UploadTask.onProgressUpdate(function(res) {
      success2(res.progress);
    })
  }
}

// 提示函数
function ti_shi(title, time = 1500, mask = false, icon = "none") {
  wx.showToast({
    // 提示的内容
    title: title,
    // 提示的时间
    duration: time,
    // 是否显示透明蒙层，防止触摸穿透(false)
    mask: mask,
    // 图标(success)
    icon: icon,
  })
}
// 显示模态对话框
function dui_hua(obj) {
  let showCancel = true;
  if (obj.l_show == false) {
    showCancel = false;
  }
  wx.showModal({
    // 对话框的标题(选填)
    title: obj.title ? obj.title : "",
    // 对话框的内容(选填)
    content: obj.content ? obj.content : "",
    // 是否显示左边的按钮(选填，默认显示)
    showCancel: showCancel,
    // 左边按钮的文字内容(选填，默认取消)
    cancelText: obj.l_text ? obj.l_text : "取消",
    // 左边按钮的文字颜色(选填，默认#000000)
    cancelColor: obj.l_color ? obj.l_color : "#000000",
    // 右边按钮的文字内容(选填，默认确定)
    confirmText: obj.r_text ? obj.r_text : "确定",
    // 右边按钮的文字颜色(选填，默认#3cc51f)
    confirmColor: obj.r_color ? obj.r_color : "#3cc51f",
    success: function(res) {
      if (res.confirm) { // 点击了确定按钮
        if (obj.r_fun) {
          obj.r_fun();
        }
      } else { // 点击了取消按钮
        if (obj.l_fun) {
          obj.l_fun();
        }
      }
    }
  })
}

// 显示加载动画
function show(title = "加载中...") {
  wx.showLoading({
    title: title,
  })
}
// 关闭加载动画
function hide() {
  wx.hideLoading();
}

// 打开一个新页面
function open(url) {
  wx.navigateTo({
    url: url
  })
}
// 当前页打开新页面
function href(url) {
  wx.redirectTo({
    url: url
  })
}
// 页面返回
function back(delta = 1) {
  wx.navigateBack({
    delta: delta
  })
}
// 获取之前页面的数据
function back_data(index) {
  // 往上一级页面传参
  const pages = getCurrentPages();
  const prevPage = pages[pages.length - index - 1]; // 上index级页面
  return prevPage;
}

// 获取input中的value值
function value(e) {
  return e.detail.value;
}
// 获取自定义的data值
function data(e, key) {
  let value;
  if (typeof(key) == "string") {
    value = e.currentTarget.dataset[key];
  } else {
    const obj = {};
    key.forEach((str) => {
      obj[str] = e.currentTarget.dataset[str];
    })
    value = obj;
  };
  return value;
}

// 获取用户授权信息
function root(success) {
  // 获取用户的授权信息
  wx.getSetting({
    success: (root) => {
      success(root);
    }
  })
}
// 判断用户有没有授权获取收货地址
function root_di_zhi(success) {
  root((root) => {
    let br;
    if (root.authSetting["scope.address"]) { //授权了获取收货地址
      br = true;
    } else { //没有授权获取收货地址
      br = false;
    }
    success(br);
  })
}
// 判断用户有没有授权获取地理位置
function root_userLocation(success) {
  root((root) => {
    let br;
    if (root.authSetting["scope.userLocation"]) { //授权了获取位置信息
      br = true;
    } else { //没有授权获取位置信息
      br = false;
    }
    success(br);
  })
}
// 获取用户当前位置所在的经纬度
function ding_wei(success) {
  wx.getLocation({
    type: 'gcj02',
    success: function(res) { //已经授权定位
      success({
        root: true,
        jing_du: res.longitude,
        wei_du: res.latitude
      })
    },
    fail: function(res) {
      success({
        root: false,
      })
    }
  })
}
// 打开地图进行选点
function xuan_dian(success) {
  wx.chooseLocation({
    success: function(res) {
      success({
        root: true,
        // 地点名称
        name: res.name,
        // 详细地址
        di_zhi: res.address,
        // 经纬度
        jing_du: res.longitude,
        wei_du: res.latitude
      });
    },
    fail: function(res) {
      success({
        root: false,
      })
    }
  });
}

// 将数据存到本地
function set_data(obj) {
  wx.setStorage({
    key: obj.key,
    data: obj.data,
    success: (res) => {
      if (obj.success) {
        obj.success(res);
      }
    },
    fail: (res) => {
      if (obj.fail) {
        obj.fail(res);
      }
    }
  })
}
// 从本地获取数据
function get_data(obj) {
  wx.getStorage({
    key: obj.key,
    success: (res) => {
      if (obj.success) {
        obj.success(res);
      }
    },
    // 如果获取不到
    fail: (res) => {
      if (obj.fail) {
        obj.fail(res);
      }
    }
  })
}
// 删除本地数据
function remove_data(obj) {
  wx.removeStorage({
    key: obj.key,
    success: (res) => {
      if (obj.success) {
        obj.success(res);
      }
    },
    // 如果获取不到
    fail: (res) => {
      if (obj.fail) {
        obj.fail(res);
      }
    }
  })
}

// 打开授权设置页面，要写在点击事件里面才管用，无法直接调用
function open_root() {
  wx.openSetting({});
}

// 拨打电话
function call(phone) {
  wx.makePhoneCall({
    phoneNumber: phone,
  })
}

// 动态设置当前页面的标题
function title(title) {
  wx.setNavigationBarTitle({
    title: title
  })
}

// 获取店铺数据
function get_shop_data(success) {
  let shop_data = getApp().data.shop_data;
  if (shop_data) {
    success(shop_data);
  } else {
    ajax_get({
      url: "/shopapi/index/get_shop",
      success: (res) => {
        shop_data = res.data.data;
        getApp().data.shop_data = shop_data;
        success(shop_data);
      },
    });
  }
}

// 获取js_code
function js_code(success) {
  wx.login({
    success(res) {
      var js_code = res.code;
      if (js_code) {
        success(js_code);
      } else {
        console.log("登录失败！");
      }
    }
  })
}
// 获取用户数据
function get_user_data(success) {
  show("登录中...");
  // 用户登陆
  wx.getUserInfo({
    success: (res1) => {
      wx.login({
        success(res2) {
          var js_code = res2.code;
          if (js_code) {
            var user_info = res1.userInfo;
            ajax_get({
              url: "/shopapi/wechat/wx_login",
              data: {
                js_code: js_code,
                avatar: user_info.avatarUrl,
                nickname: user_info.nickName,
              },
              success: (res3) => {
                var data = res3.data.data;
                if (data) {
                  getApp().data.member_id = data.member_id;
                  ajax_get({
                    url: "/shopapi/member/info",
                    success: (res4) => {
                      var data = res4.data.data;
                      if (data) {
                        getApp().data.user_data = data;
                        success(data);
                        hide();
                      }
                    }
                  })
                }
              },
              fail() {
                hide();
              }
            })
          } else {
            hide();
            console.log("登录失败！");
          }
        }
      })
    }
  })
}

// 判断用户是否登录
function deng_lu() {
  // 获取用户id
  let member_id = getApp().data.member_id;
  return member_id ? true : false;
}

// 微信支付函数
function zhi_fu(obj) {
  js_code((js_code) => {
    ajax_get({
      url: "/api/pay/dopay",
      data: {
        js_code: js_code,
        order_id: obj.data.order_id,
        table: obj.data.table,
        pay_type: 1,
      },
      success: (res) => {
        let zf_data = res.data.data;
        wx.requestPayment({
          'timeStamp': zf_data.timeStamp,
          'nonceStr': zf_data.nonceStr,
          'package': zf_data.package,
          'signType': zf_data.signType,
          'paySign': zf_data.paySign,
          'success': function(res) {
            if (obj.success) {
              obj.success(res);
            }
          },
          'fail': function(res) {
            if (obj.fail) {
              obj.fail(res);
            }
          }
        })
      }
    })
  })
}

module.exports = {
  // 店铺的id
  shop_id: shop_id,
  // 图片路径的公用部分
  img_src: img_src,
  // 店内设施
  dnss: dnss,
  // 商品分类
  goods_type: goods_type,
  // 网络请求
  ajax: ajax,
  // 网络请求（GET）
  ajax_get: ajax_get,
  // 网络请求（POST）
  ajax_post: ajax_post,
  // 图片预览函数
  look_img: look_img,
  // 上传图片函数，注意修改函数的name值
  add_img: add_img,
  // 封装一个上传视频的函数
  add_video: add_video,
  // 提示函数
  ti_shi: ti_shi,
  // 显示加载动画
  show: show,
  // 关闭加载动画(直接调用就好，和show成对使用)
  hide: hide,
  // 打开一个新页面
  open: open,
  // 当前页打开新页面
  href: href,
  // 页面返回
  back: back,
  // 获取之前页面的数据
  back_data: back_data,
  // 获取input中的value值
  value: value,
  // 获取自定义的data值
  data: data,
  // 判断用户有没有授权获取收货地址
  root_di_zhi: root_di_zhi,
  // 获取用户当前位置所在的经纬度
  ding_wei: ding_wei,
  // 打开地图进行选点
  xuan_dian: xuan_dian,
  // 将数据存到本地
  set_data: set_data,
  // 从本地获取数据
  get_data: get_data,
  // 删除本地数据
  remove_data: remove_data,
  // 显示模态对话框
  dui_hua: dui_hua,
  // 打开授权设置页面
  open_root: open_root,
  // 拨打电话
  call: call,
  // 动态设置当前页面的标题
  title: title,

  // 获取店铺数据
  get_shop_data: get_shop_data,
  // 获取js_code
  js_code: js_code,
  // 获取用户数据
  get_user_data: get_user_data,
  // 判断用户是否登录
  deng_lu: deng_lu,
  // 微信支付函数
  zhi_fu: zhi_fu,
}